Note: you may need to restart the kernel to use updated packages.
Requirement already satisfied: yfinance in /home/dix/programs/anaconda3/lib/python3.12/site-packages (0.2.54) Requirement already satisfied: pandas_datareader in /home/dix/programs/anaconda3/lib/python3.12/site-packages (0.10.0) Requirement already satisfied: requests in /home/dix/programs/anaconda3/lib/python3.12/site-packages (2.32.3) Requirement already satisfied: pandas>=1.3.0 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (2.2.2) Requirement already satisfied: numpy>=1.16.5 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (1.26.4) Requirement already satisfied: multitasking>=0.0.7 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (0.0.11) Requirement already satisfied: platformdirs>=2.0.0 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (3.10.0) Requirement already satisfied: pytz>=2022.5 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (2024.1) Requirement already satisfied: frozendict>=2.3.4 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (2.4.2) Requirement already satisfied: peewee>=3.16.2 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (3.17.9) Requirement already satisfied: beautifulsoup4>=4.11.1 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from yfinance) (4.12.3) Requirement already satisfied: lxml in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from pandas_datareader) (5.2.1) Requirement already satisfied: charset-normalizer<4,>=2 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from requests) (3.3.2) Requirement already satisfied: idna<4,>=2.5 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from requests) (3.7) Requirement already satisfied: urllib3<3,>=1.21.1 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from requests) (2.2.3) Requirement already satisfied: certifi>=2017.4.17 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from requests) (2025.1.31) Requirement already satisfied: soupsieve>1.2 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from beautifulsoup4>=4.11.1->yfinance) (2.5) Requirement already satisfied: python-dateutil>=2.8.2 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from pandas>=1.3.0->yfinance) (2.9.0.post0) Requirement already satisfied: tzdata>=2022.7 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from pandas>=1.3.0->yfinance) (2023.3) Requirement already satisfied: six>=1.5 in /home/dix/programs/anaconda3/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas>=1.3.0->yfinance) (1.16.0) Note: you may need to restart the kernel to use updated packages.
Progetto di Metodi Probabilistici e Statistici per Mercati Finanziari
Autore: Dissan Uddin Ahmed
Analisi Finanziaria Dei Mercati Nazionali
I mercati finanziari nazionali rappresentano un pilastro fondamentale dell’economia globale, riflettendo le dinamiche economiche, politiche e sociali di ciascun paese. Questo tipo di analisi aiuta gli investitori a gestire il rischio e capire quali titoli inserire nel proprio portafoglio finanziario. Si cerca di capire come la volatilità sia un parametro da tenere d'occhio quando si investe in borsa.
1) Analisi di mercato
La liquidità di un mercato finanziario si riferisce alla facilità con cui gli investitori possono comprare o vendere titoli finanziari senza causare significative fluttuazioni nei prezzi di mercato. Un mercato altamente liquido è caratterizzato da una maggiore attività di scambio di titoli, un elevato numero di partecipanti, un elevato volume di scambi giornalieri e una stretta differenza tra i prezzi di acquisto (offerta) e i prezzi di vendita (domanda), noti come spread.
La liquidità è un importante fattore da considerare quando si decide di investire in un mercato finanziario.
1.1) Entrata e Uscita mercato azionario
L'entrata e l'uscita dal mercato finanziario sono processi fondamentali per investitori e aziende. Un investitore entra nel mercato acquistando strumenti finanziari come azioni, obbligazioni o derivati, generalmente tramite un intermediario finanziario come una banca o un broker. La decisione di investire si basa su analisi di mercato e strategie di rendimento.
Le aziende possono entrare nel mercato attraverso la quotazione in borsa (IPO), e uscire quando decidono di vendere i propri asset o quando non rispettano i requisiti di mercato.
1.2) Liquidità del Mercato Azionario
La liquidità del mercato azionario si riferisce alla facilità con cui le azioni possono essere acquistate o vendute senza causare fluttuazioni significative nel loro prezzo. Ci sono due aspetti principali della liquidità :
- Liquidità immediata: La capacità di eseguire ordini di acquisto o vendita a un prezzo vicino al valore di mercato senza influenzare il prezzo stesso.
- Profondità del mercato: La quantità di ordini di acquisto e vendita a vari livelli di prezzo.
Fattori che influenzano la liquidità includono il volume di scambi, la volatilità e la partecipazione degli investitori istituzionali.
2) Estrazione dei dati
Sono stati scelti i mercati nazionali più importanti e il mercato nazionale italiano, un mercato più piccolo, per verificare alla fine dello studio, se c'è correlazione tra queste borse. I dati sono stati scaricati tramite la libreria Python yfinance, e comprendono la serie storica degli ultimi due anni degli indici delle seguenti borse:
- FTSE MIB
- Dow Jones
- NASDAQ
- Nikkei 225
- HANG SENG INDEX
In questa sezione si osservano i dataset che sono stati presi in considerazione ed i prezzi di chiusura rettificata delle varie borse.
2.1) FTSE MIB¶
| Adjusted Close | Close | High | Low | Open | Volume | |
|---|---|---|---|---|---|---|
| Date | ||||||
| 2025-02-18 | 38554.0 | 38554.0 | 38581.0 | 38418.0 | 38467.0 | 686047400 |
| 2025-02-19 | 38348.0 | 38348.0 | 38883.0 | 38320.0 | 38666.0 | 924138500 |
| 2025-02-20 | 38249.0 | 38249.0 | 38532.0 | 38179.0 | 38405.0 | 471872000 |
| 2025-02-21 | 38421.0 | 38421.0 | 38492.0 | 38285.0 | 38405.0 | 463321500 |
| 2025-02-24 | 38473.0 | 38473.0 | 38594.0 | 38155.0 | 38433.0 | 613633000 |
| 2025-02-25 | 38715.0 | 38715.0 | 38910.0 | 38303.0 | 38323.0 | 532235400 |
| 2025-02-26 | 39225.0 | 39225.0 | 39252.0 | 38798.0 | 38826.0 | 693421700 |
| 2025-02-27 | 38623.0 | 38623.0 | 39046.0 | 38380.0 | 39044.0 | 548304800 |
| 2025-02-28 | 38655.0 | 38655.0 | 38691.0 | 38324.0 | 38415.0 | 637789400 |
| 2025-03-03 | 39069.0 | 39069.0 | 39248.0 | 38404.0 | 38644.0 | 526157100 |
tabella1tabella 1
2.2) London Stock Exchange¶
| Adjusted Close | Close | High | Low | Open | Volume | |
|---|---|---|---|---|---|---|
| Date | ||||||
| 2025-02-18 | 11690.0 | 11690.0 | 11755.0 | 11647.916016 | 11720.0 | 581454 |
| 2025-02-19 | 11705.0 | 11705.0 | 11795.0 | 11625.000000 | 11660.0 | 1219294 |
| 2025-02-20 | 11700.0 | 11700.0 | 11755.0 | 11645.000000 | 11755.0 | 665478 |
| 2025-02-21 | 11585.0 | 11585.0 | 11710.0 | 11565.000000 | 11685.0 | 1810842 |
| 2025-02-24 | 11300.0 | 11300.0 | 11605.0 | 11250.000000 | 11560.0 | 1012104 |
| 2025-02-25 | 11140.0 | 11140.0 | 11330.0 | 11110.000000 | 11305.0 | 1235707 |
| 2025-02-26 | 11100.0 | 11100.0 | 11240.0 | 11070.000000 | 11145.0 | 1891600 |
| 2025-02-27 | 11775.0 | 11775.0 | 11805.0 | 11190.000000 | 11390.0 | 1447385 |
| 2025-02-28 | 11845.0 | 11845.0 | 11845.0 | 11390.960938 | 11795.0 | 2581614 |
| 2025-03-03 | 11750.0 | 11750.0 | 11915.0 | 11695.000000 | 11890.0 | 1453941 |
[tabella 2]
2.3) Dow Jones¶
| Adjusted Close | Close | High | Low | Open | Volume | |
|---|---|---|---|---|---|---|
| Date | ||||||
| 2025-02-18 | 44556.339844 | 44556.339844 | 44602.019531 | 44319.320312 | 44583.910156 | 551790000 |
| 2025-02-19 | 44627.589844 | 44627.589844 | 44636.191406 | 44312.648438 | 44478.121094 | 438880000 |
| 2025-02-20 | 44176.648438 | 44176.648438 | 44561.109375 | 43950.160156 | 44561.109375 | 448500000 |
| 2025-02-21 | 43428.019531 | 43428.019531 | 43959.730469 | 43349.328125 | 43820.128906 | 622550000 |
| 2025-02-24 | 43461.210938 | 43461.210938 | 43699.148438 | 43343.671875 | 43493.121094 | 615500000 |
| 2025-02-25 | 43621.160156 | 43621.160156 | 43767.738281 | 43282.980469 | 43509.738281 | 641310000 |
| 2025-02-26 | 43433.121094 | 43433.121094 | 43866.500000 | 43318.929688 | 43635.421875 | 590270000 |
| 2025-02-27 | 43239.500000 | 43239.500000 | 43884.191406 | 43224.531250 | 43516.441406 | 739620000 |
| 2025-02-28 | 43840.910156 | 43840.910156 | 43873.550781 | 43100.871094 | 43259.839844 | 782170000 |
| 2025-03-03 | 43191.238281 | 43191.238281 | 44033.781250 | 42919.308594 | 43900.488281 | 731560000 |
[tabella 3]
2.4) NASDAQ¶
| Adjusted Close | Close | High | Low | Open | Volume | |
|---|---|---|---|---|---|---|
| Date | ||||||
| 2025-02-18 | 20041.259766 | 20041.259766 | 20110.119141 | 19909.740234 | 20090.550781 | 8683170000 |
| 2025-02-19 | 20056.250000 | 20056.250000 | 20099.390625 | 19928.890625 | 19994.500000 | 8171530000 |
| 2025-02-20 | 19962.359375 | 19962.359375 | 20041.150391 | 19795.019531 | 20029.189453 | 7329270000 |
| 2025-02-21 | 19524.009766 | 19524.009766 | 20016.660156 | 19510.910156 | 20006.689453 | 8461020000 |
| 2025-02-24 | 19286.929688 | 19286.929688 | 19644.230469 | 19275.460938 | 19590.849609 | 7414760000 |
| 2025-02-25 | 19026.390625 | 19026.390625 | 19256.349609 | 18871.519531 | 19242.609375 | 7991440000 |
| 2025-02-26 | 19075.259766 | 19075.259766 | 19286.019531 | 18966.460938 | 19109.320312 | 7034450000 |
| 2025-02-27 | 18544.419922 | 18544.419922 | 19242.689453 | 18535.220703 | 19212.359375 | 7700290000 |
| 2025-02-28 | 18847.279297 | 18847.279297 | 18861.330078 | 18372.990234 | 18477.169922 | 8247520000 |
| 2025-03-03 | 18350.189453 | 18350.189453 | 18992.300781 | 18216.630859 | 18923.359375 | 8170140000 |
[tabella 4]
2.5) Nikkei 225¶
| Adjusted Close | Close | High | Low | Open | Volume | |
|---|---|---|---|---|---|---|
| Date | ||||||
| 2025-02-17 | 39174.250000 | 39174.250000 | 39238.750000 | 39021.230469 | 39094.089844 | 111300000 |
| 2025-02-18 | 39270.398438 | 39270.398438 | 39508.550781 | 39151.710938 | 39187.988281 | 116000000 |
| 2025-02-19 | 39164.609375 | 39164.609375 | 39298.050781 | 38994.699219 | 39230.621094 | 124300000 |
| 2025-02-20 | 38678.039062 | 38678.039062 | 38967.011719 | 38468.718750 | 38942.910156 | 125200000 |
| 2025-02-21 | 38776.941406 | 38776.941406 | 38808.808594 | 38456.531250 | 38523.070312 | 130100000 |
| 2025-02-25 | 38237.789062 | 38237.789062 | 38485.949219 | 38131.789062 | 38359.671875 | 132900000 |
| 2025-02-26 | 38142.371094 | 38142.371094 | 38175.238281 | 37742.761719 | 38143.679688 | 120800000 |
| 2025-02-27 | 38256.171875 | 38256.171875 | 38369.960938 | 38061.941406 | 38251.109375 | 121600000 |
| 2025-02-28 | 37155.500000 | 37155.500000 | 37925.281250 | 36840.121094 | 37853.480469 | 191600000 |
| 2025-03-03 | 37785.468750 | 37785.468750 | 37827.621094 | 37372.261719 | 37617.500000 | 115800000 |
[tabella 5]
2.6) HANG SENG INDEX¶
| Adjusted Close | Close | High | Low | Open | Volume | |
|---|---|---|---|---|---|---|
| Date | ||||||
| 2025-02-18 | 22976.810547 | 22976.810547 | 23141.410156 | 22608.179688 | 22664.730469 | 5222600000 |
| 2025-02-19 | 22944.240234 | 22944.240234 | 22975.339844 | 22649.490234 | 22777.460938 | 4080400000 |
| 2025-02-20 | 22576.980469 | 22576.980469 | 22849.660156 | 22436.130859 | 22716.710938 | 4200400000 |
| 2025-02-21 | 23477.919922 | 23477.919922 | 23477.919922 | 22901.689453 | 23090.029297 | 6167300000 |
| 2025-02-24 | 23341.609375 | 23341.609375 | 23688.449219 | 23221.570312 | 23472.140625 | 5264600000 |
| 2025-02-25 | 23034.019531 | 23034.019531 | 23248.519531 | 22716.480469 | 22716.480469 | 4449800000 |
| 2025-02-26 | 23787.929688 | 23787.929688 | 23973.169922 | 23238.339844 | 23238.339844 | 5138100000 |
| 2025-02-27 | 23718.289062 | 23718.289062 | 24076.529297 | 23441.740234 | 23783.750000 | 6257000000 |
| 2025-02-28 | 22941.320312 | 22941.320312 | 23616.179688 | 22798.339844 | 23616.179688 | 6578300000 |
| 2025-03-03 | 23006.269531 | 23006.269531 | 23405.980469 | 22861.750000 | 23135.119141 | 4338200000 |
[tabella 6]
Grafico delle chiusure rettificate¶
[Figura 1]
Grafico dei rendimenti logaritmici%
[Figura 2]
3) Analisi del Dataset¶
Bisogna ora verificare se il dataset ha i requisiti per poter usare un modello GARCH.
3.1) Test ADF¶
Verifica la presenza di una radice unitaria.
- Ipotesi nulla: serie temporale non è stazionaria (ha una radice unitaria).
3.2) Test KPSS¶
Verifica la stazionarietà della serie temporale.
- Ipotesi nulla: serie temporale stazionaria.
3.3) Test di Engle (ARCH Test)¶
Verifica la presenza di eteroschedasticità condizionata.
- Ipotesi nulla: la serie temporale non presenta eteroschedasticità condizionata (varianza costante nel tempo).
Test ADF Chiusura Rettificata
Qui si fa il test sui Prezzi rettificati ci si aspetta che l'ipotesi nulla sia accettata. I prezzi generalmente non sono stazionari.
Test ADF Chiusura Rettificata
Qui si fa il test sui Prezzi rettificati ci si aspetta che l'ipotesi nulla sia accettata. I prezzi generalmente non sono stazionari.
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | -0.106791 | 0.948758 | accepted |
| London Stock Exchange | -0.078668 | 0.951522 | accepted |
| Dow Jones | -0.55681 | 0.880446 | accepted |
| NASDAQ | -0.539786 | 0.884016 | accepted |
| Nikkei 225 | -1.441682 | 0.562138 | accepted |
| HANG SENG INDEX | -2.079428 | 0.252867 | accepted |
[Tabella 1]
Test ADF Ritorno logaritmico in percentuale
Nei dati di mercato si aspetta che i rendimenti logaritmici siano stazionari quindi, il test rigetta l'ipotesi nulla che non siano stazionari.
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | -28.322738 | 0.0 | rejected |
| London Stock Exchange | -27.978649 | 0.0 | rejected |
| Dow Jones | -26.724298 | 0.0 | rejected |
| NASDAQ | -27.747734 | 0.0 | rejected |
| Nikkei 225 | -28.330204 | 0.0 | rejected |
| HANG SENG INDEX | -26.399908 | 0.0 | rejected |
[Tabella 2]
Interpretazione ADF¶
L'interpretazione del test ADF è particolarmente rilevante per le serie storiche finanziarie. Le chiusure rettificate, infatti, tendono a non essere stazionarie, mentre i rendimenti lo sono. Pertanto, per il modello GARCH(1,1), questo primo test suggerisce l'uso dei rendimenti logaritmici.
Test Kpss chiusura Rettificata
Ci si aspetta di rifiutare l'ipotesi nulla del test KPSS, che assume la stazionarietà della serie delle chiusure rettificate dei prezzi.
Questo risultato è coerente con il test ADF, che indica che i prezzi non sono stazionari[Tabella 1].
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | 4.100505 | 0.01 | rejected |
| London Stock Exchange | 3.572893 | 0.01 | rejected |
| Dow Jones | 3.714412 | 0.01 | rejected |
| NASDAQ | 3.74084 | 0.01 | rejected |
| Nikkei 225 | 3.884299 | 0.01 | rejected |
| HANG SENG INDEX | 0.764956 | 0.01 | rejected |
[Tabella 3]
Test Kpss Ritorno logarimico
Ci si aspetta che l'ipotesi nulla venga accettata in quanto in [Tabella 2], viene rifiutato il test ADF
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | 0.044266 | 0.1 | accepted |
| London Stock Exchange | 0.079169 | 0.1 | accepted |
| Dow Jones | 0.07054 | 0.1 | accepted |
| NASDAQ | 0.131717 | 0.1 | accepted |
| Nikkei 225 | 0.052693 | 0.1 | accepted |
| HANG SENG INDEX | 0.163977 | 0.1 | accepted |
[Tabella 4]
Interpretazione KPSS¶
Il test KPSS conferma chiaramente che le chiusure rettificate non sono stazionarie, mentre i ritorni logaritmici lo sono. In altre parole, l'ipotesi nulla del test KPSS, secondo cui la serie sarebbe stazionaria, viene respinta per le chiusure rettificate, evidenziando la presenza di trend o altre dinamiche che alterano la stazionarietà . Al contrario, i ritorni logaritmici, calcolati come la differenza tra i logaritmi dei prezzi, eliminano queste componenti non stazionarie, risultando in una serie più adatta alle analisi statistiche. Questa evidenza, confermata anche dai risultati del test ADF, rende evidente che, per l'applicazione di modelli econometrici come il GARCH(1,1) — che richiedono serie stazionarie per una corretta specificazione e previsione della volatilità — l'utilizzo dei ritorni logaritmici è la scelta più appropriata
Test Engle's Arch Ritorno sulla volatiliÃ
Si decidere di prendere in considerazione i rendimenti logaritmici e si testa la volatilità realizzata su una finestra mobile di 21 giorni
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | 706.082102 | 0.0 | rejected |
| London Stock Exchange | 696.839186 | 0.0 | rejected |
| Dow Jones | 699.808358 | 0.0 | rejected |
| NASDAQ | 701.735088 | 0.0 | rejected |
| Nikkei 225 | 685.963295 | 0.0 | rejected |
| HANG SENG INDEX | 674.447824 | 0.0 | rejected |
[Tabella 5]
Interpretazione Engle's Arch¶
Il test di Engle's ARCH verifica la presenza di effetti ARCH, ovvero variazioni condizionali della varianza nel tempo. In questo caso, il test rigetta l'ipotesi nulla per tutti i mercati analizzati, indicando che la varianza non rimane costante nel tempo. Questo risultato evidenzia una struttura di volatilità dinamica nelle serie, rendendo necessari modelli come il GARCH per una corretta modellizzazione della varianza.
3.5) Plot delle volatilità Realizzate Annualizzate
[Figura3]
3.6) Test di Shapiro-Wilk¶
Verifica se la serie temporale segue una distribuzione normale.
- Ipotesi nulla: la serie temporale segue una distribuzione normale.
3.7) Test di D’Agostino-Pearson¶
Verifica se la serie temporale segue una distribuzione normale, considerando asimmetria (skewness) e curtosi (kurtosis).
- Ipotesi nulla: la serie temporale segue una distribuzione normale.
3.8) Test di Jarque-Bera¶
Verifica se la serie temporale segue una distribuzione normale basandosi su skewness e kurtosis.
- ipotesi nulla: la serie temporale segue una distribuzione normale
Shapiro Test Sui rendimenti Logaritmici
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | 0.964195 | 0.0 | rejected |
| London Stock Exchange | 0.95719 | 0.0 | rejected |
| Dow Jones | 0.975625 | 0.0 | rejected |
| NASDAQ | 0.984566 | 0.0 | rejected |
| Nikkei 225 | 0.894408 | 0.0 | rejected |
| HANG SENG INDEX | 0.963362 | 0.0 | rejected |
[Tabella 6]
Agostino Pearson Test sui Rendimenti Logaritmici
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | 76.345784 | 0.0 | rejected |
| London Stock Exchange | 77.999976 | 0.0 | rejected |
| Dow Jones | 42.820899 | 0.0 | rejected |
| NASDAQ | 30.403838 | 0.0 | rejected |
| Nikkei 225 | 280.614075 | 0.0 | rejected |
| HANG SENG INDEX | 73.791289 | 0.0 | rejected |
[Tabella 7]
Jarque Bera Test sui Rendimenti Logaritmici
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | 371.966568 | 0.0 | rejected |
| London Stock Exchange | 481.664528 | 0.0 | rejected |
| Dow Jones | 130.271534 | 0.0 | rejected |
| NASDAQ | 67.245305 | 0.0 | rejected |
| Nikkei 225 | 9664.235738 | 0.0 | rejected |
| HANG SENG INDEX | 351.007831 | 0.0 | rejected |
[Tabella 8]
3.6) QQ-Plot
Il QQ-Plot (Quantile-Quantile Plot) è uno strumento grafico utilizzato per confrontare la distribuzione dei dati osservati con una distribuzione teorica di riferimento,
ad esempio la distribuzione normale.
Se i punti del QQ-Plot si allineano lungo una retta, ciò indica che la distribuzione dei dati è simile a quella teorica.
In caso contrario, eventuali deviazioni dalla retta possono segnalare asimmetria, code pesanti o altre anomalie nella distribuzione.
4) Modelli GARCH¶
I modelli GARCH (Generalized Autoregressive Conditional Heteroskedasticity) sono strumenti fondamentali per analizzare e prevedere la volatilità nelle serie temporali finanziarie, come i prezzi azionari, i tassi di cambio o i tassi di interesse. Essi risultano particolarmente utili quando la variabilità dei dati non è costante nel tempo, ma varia in maniera periodica.
4.1) Motivazione per l'uso dei modelli GARCH¶
Nei mercati finanziari la volatilità dei rendimenti tende a variare: durante periodi di crisi essa aumenta, mentre in momenti di stabilità può diminuire. I modelli GARCH sono concepiti per catturare questa dinamica, modellando la volatilità futura come funzione dei valori passati della volatilità stessa e degli errori di previsione antecedenti.
4.2) Struttura del modello GARCH¶
Un modello GARCH si compone di due componenti principali:
- Autoregressiva (AR): cattura la dipendenza della serie dai valori passati.
- Condizionale (CH): modella la volatilità condizionale (varianza) in funzione dei dati storici.
Una formulazione standard di un modello GARCH(p, q) è la seguente:
$$r_t = \mu + \epsilon_t$$$$\epsilon_t = \sigma_t e_t$$$$\sigma^2_t = \omega + \alpha \epsilon^2_{t-1} + \beta \sigma^2_{t-1}$$dove:
- $r_t$ è il rendimento al tempo $t$;
- $\mu$ rappresenta la media della serie;
- $\epsilon_t$ è l'errore al tempo $t$, influenzato dalla volatilità condizionale $\sigma^2_t$;
- $\omega$, $\alpha$ e $\beta$ sono parametri da stimare.
- $\sigma^2_t$ La volatilità condizionale è espressa come una combinazione lineare degli errori passati e della volatilità del periodo precedente.
4.3) Scelta del modello f-GARCH (Sottmodello GARCH(1,1))¶
Dall'analisi dei dati si osserva che la volatilità aumenta in misura maggiore a seguito di shock negativi, evidenziando un effetto asimmetrico. Per modellare questa caratteristica, è stata scelta una variante flessibile del GARCH, nota come f-GARCH.
Una possibile specificazione del modello f-GARCH è la seguente:
- $r_t = \mu + \epsilon_t$
- $\epsilon_t = \sigma_t z_t$
- $\sigma^2_t = \omega + \alpha\, f(\epsilon_{t-1}) + \beta \sigma^2_{t-1}$
dove la funzione $f(\cdot)$ è studiata per catturare l'impatto asimmetrico degli shock. Ad esempio, una specificazione comune è:
$f(\epsilon_{t-1}) = \left( |\epsilon_{t-1}| - \gamma\, \epsilon_{t-1} \right)^2$
In questa formulazione, un valore positivo di $\gamma$ implica che gli shock negativi influenzano la volatilità in maniera più marcata rispetto agli shock positivi.
Per la fase di stima, il 90% del dataset è stato utilizzato per il fitting del modello, mentre la scelta della distribuzione degli errori è stata effettuata mediante il criterio della massima verosimiglianza, al fine di individuare la distribuzione che meglio rappresenta le caratteristiche empiriche dei dati.
Test ADF Sui residui del modello GARHC
Nei dati di mercato si aspetta che i residui siano stazionari quindi, il test rigetta l'ipotesi nulla che non siano stazionari.
Come in [Tabella 2]
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | -26.563463 | 0.0 | rejected |
| London Stock Exchange | -26.589805 | 0.0 | rejected |
| Dow Jones | -25.72439 | 0.0 | rejected |
| NASDAQ | -26.431376 | 0.0 | rejected |
| Nikkei 225 | -26.076401 | 0.0 | rejected |
| HANG SENG INDEX | -25.419835 | 0.0 | rejected |
[Tabella 9]
Test Kpss Residui modello GARCH
Ci si aspetta che l'ipotesi nulla venga accettata in quanto ci si aspetta che i residui siano stazionari.
Come in [Tabella 4].
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | 0.114389 | 0.1 | accepted |
| London Stock Exchange | 0.054204 | 0.1 | accepted |
| Dow Jones | 0.129198 | 0.1 | accepted |
| NASDAQ | 0.209622 | 0.1 | accepted |
| Nikkei 225 | 0.028945 | 0.1 | accepted |
| HANG SENG INDEX | 0.097537 | 0.1 | accepted |
Test di Ljung-Box (Autocorrelazione dei residui)¶
Controlla se esiste autocorrelazione nei residui di una serie temporale.
- Ipotesi nulla: I residui non sono autocorrelati (seguono un rumore bianco).
La serie temporale non presenta eteroschedasticità condizionata (varianza costante nel tempo). - Ipotesi alternativa: I residui mostrano autocorrelazione, suggerendo che il modello non ha catturato tutta la dipendenza temporale.
Test Ljung-Box Residui modello GARCH
Ci si aspetta che l'ipotesi nulla venga accettata, indicando che i residui non presentano autocorrelazione e seguono un rumore bianco.
| Statistic | PVALUE | Null Hypotesis | |
|---|---|---|---|
| FTSE MIB | 16.510189 | 0.740336 | accepted |
| London Stock Exchange | 18.053558 | 0.645612 | accepted |
| Dow Jones | 27.976185 | 0.140828 | accepted |
| NASDAQ | 36.137602 | 0.0211 | rejected |
| Nikkei 225 | 14.861735 | 0.829825 | accepted |
| HANG SENG INDEX | 30.677706 | 0.079192 | accepted |
[Tabella 11]
Grafico Residui¶
Generazione di Traiettorie Simulate¶
Questa sezione si occupa della simulazione di traiettorie di rendimento basate sul modello GARCH(1,1). Vengono generate più simulazioni per ciascun indice finanziario, partendo dai parametri stimati del modello. L'obiettivo è ottenere una rappresentazione delle possibili evoluzioni future della volatilità e dei rendimenti.
Le traiettorie simulate possono essere utilizzate successivamente per il plotting, consentendo un'analisi visiva della dispersione dei rendimenti e della loro volatilità attesa nel tempo. Inoltre, viene calcolata la traiettoria mediana, utile per avere un riferimento centrale tra le diverse simulazioni.
Confronto della Volatilità ¶
Questa funzione si occupa di generare dei grafici comparativi per visualizzare l'andamento nel tempo dei rendimenti logaritmici e della volatilità condizionale stimata per ciascun indice finanziario. Utilizzando i dati presenti nell'oggetto GarchUtil, la funzione crea una serie di sottotrame (una per ogni indice) in cui viene tracciata una linea per i rendimenti e un'altra per la volatilità derivata dal modello fGARCH (GARCH(1,1)). Il grafico risultante, completo di titoli, etichette e legende, consente di analizzare e confrontare visivamente l'evoluzione dei due indicatori nel tempo, evidenziando eventuali dinamiche e differenze tra i vari mercati.
Valutazione degli Intervalli di Confidenza sui Rendimenti Futuri¶
In questo contesto si mira a verificare l'accuratezza delle previsioni della volatilità , utilizzando intervalli di confidenza per i rendimenti futuri del test set. Per ogni livello di confidenza (ad esempio, 80%, 90%, 95%), vengono definiti dei limiti superiori e inferiori attorno alla stima della volatilità . Questi limiti indicano l'intervallo entro cui ci si aspetta che i rendimenti futuri ricadano con la probabilità specificata.
L'analisi consiste nel controllare quanti dei rendimenti osservati nel test set rientrano in ciascuno di questi intervalli di confidenza. Il risultato viene poi sintetizzato in una tabella, che mostra la percentuale di punti "catturati" dai vari intervalli. Questo approccio permette di valutare la capacità predittiva del modello in termini di accuratezza degli intervalli e di identificare eventuali discrepanze tra le previsioni e i dati reali.
| 80% | 85% | 90% | 95% | |
|---|---|---|---|---|
| FTSE MIB | 89.47% | 93.42% | 96.05% | 98.68% |
| London Stock Exchange | 84.21% | 86.84% | 93.42% | 94.74% |
| Dow Jones | 82.67% | 89.33% | 92.00% | 94.67% |
| NASDAQ | 85.33% | 89.33% | 92.00% | 96.00% |
| Nikkei 225 | 90.54% | 91.89% | 97.30% | 97.30% |
| HANG SENG INDEX | 86.49% | 89.19% | 91.89% | 95.95% |
4) Metriche di Accuratezza¶
Per valutare il modello usato, consideriamo le seguenti metriche di accuratezza:
Scale-Dependent Metrics
- $\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| $
Indica l'errore medio assoluto tra le previsioni e i valori reali. Un valore basso è preferibile, poiché indica una buona adattabilità del modello ai dati.
- $\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 $
Misura la deviazione quadratica media tra le previsioni e i valori reali. Si eleva al quadrato gli errori, enfatizzando gli errori più grandi. È sensibile agli outlier. Un MSE più basso è migliore, indicando una migliore precisione.
- $\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| $
Scale Free Metrics
- $\text{MASE} = \frac{MAE}{\frac{1}{m-1} \sum_{j=2}^{m} |y_j - y_{j-1}|} $
Valuta la capacità predittiva del modello rispetto a un modello naïve dove le previsioni sono basate sul valore precedente. Un valore inferiore a 1 indica che il modello è migliore del modello naïve.
- $\text{RMSSE} = \sqrt{\frac{MSE}{\frac{1}{m-1} \sum_{j=2}^{m} (y_j - y_{j-1})^2}} $
È una versione scalata di MSE, che considera anche il confronto con un modello di benchmark (ad esempio, il modello naïve). Un valore inferiore a 1 indica una migliore performance rispetto al modello di riferimento.
- $\text{MASE} = \frac{MAE}{\frac{1}{m-1} \sum_{j=2}^{m} |y_j - y_{j-1}|} $
| MAE | MSE | MASE | RMSSE | |
|---|---|---|---|---|
| FTSE MIB | 0.437246 | 0.229476 | 16.127082 | 10.870965 |
| London Stock Exchange | 0.270665 | 0.089369 | 7.126525 | 3.544068 |
| Dow Jones | 0.270987 | 0.097056 | 9.095685 | 4.863996 |
| NASDAQ | 0.369655 | 0.161757 | 8.039922 | 4.883401 |
| Nikkei 225 | 0.517749 | 0.283473 | 18.136015 | 12.493479 |
| HANG SENG INDEX | 1.513829 | 2.324972 | 30.231048 | 20.179274 |
GARCH MULTIDIMENSIONALE¶
I modelli GARCH multidimensionali rappresentano un'estensione dei modelli univariati, progettati per catturare non solo la volatilità condizionata di una singola serie, ma anche le interdipendenze tra più serie temporali. Questi modelli sono particolarmente utili in ambito finanziario per analizzare la dinamica congiunta di asset, consentendo di modellare la matrice di covarianza condizionata e, quindi, di prevedere in maniera dinamica sia le varianze individuali sia le correlazioni tra di esse.
Motivazioni e Obiettivi¶
- Dinamica Congiunta: I modelli multidimensionali permettono di descrivere come la volatilità di ciascun asset interagisca con quella degli altri, offrendo una visione più completa dei rischi condivisi.
- Gestione del Rischio e Ottimizzazione del Portafoglio: La stima dinamica della matrice di covarianza è fondamentale per valutare la correlazione tra asset e per costruire portafogli efficienti.
- Garantire la Positività : Questi modelli assicurano che la matrice di covarianza condizionata sia definita positiva, condizione essenziale per la coerenza delle previsioni di rischio.
DCC-GARCH¶
Formulazione del DCC-GARCH¶
Il modello DCC-GARCH si articola in due fasi: la modellizzazione univariata della volatilità per ogni serie e la dinamica condizionale delle correlazioni tra le serie.
1. Modellizzazione Univariata¶
Per ogni serie (i), si assume un modello GARCH univariato, ad esempio di tipo GARCH(1,1):
$r_{i,t} = \mu_i + \epsilon_{i,t}, \quad \epsilon_{i,t} = \sqrt{h_{i,t}} \, z_{i,t}$
$h_{i,t} = \omega_i + \alpha_i \, \epsilon_{i,t-1}^2 + \beta_i \, h_{i,t-1}$
dove:
- $r_{i,t}$ è il rendimento della serie $i$ al tempo $t$;
- $h_{i,t}$ è la varianza condizionata della serie $i$;
- $z_{i,t}$ sono gli errori standardizzati, assunti generalmente i.i.d. con distribuzione adatta (es. normale o t-Student).
I residui standardizzati sono ottenuti come:
$z_{i,t} = \frac{\epsilon_{i,t}}{\sqrt{h_{i,t}}}$
2. Dinamica Condizionale delle Correlazioni¶
Una volta ottenuti i residui standardizzati per tutte le serie, si definisce il vettore $z_t = (z_{1,t}, z_{2,t}, \dots, z_{N,t})'$ e si costruisce la matrice di correlazione non normalizzata (Q_t) secondo il seguente processo dinamico:
$Q_t = (1 - a - b) \, \bar{Q} + a \, z_{t-1} z_{t-1}' + b \, Q_{t-1}$
dove:
- (a) e (b) sono parametri che controllano l'impatto degli shock passati e la persistenza della dinamica delle correlazioni;
- $\bar{Q}$ è la matrice di covarianza invariante (o incondizionata) dei residui standardizzati.
Infine, la matrice di correlazione condizionale $R_t$ viene ottenuta normalizzando $Q_t$:
$R_t = \text{diag}(Q_t)^{-1/2} \, Q_t \, \text{diag}(Q_t)^{-1/2}$
Questa normalizzazione assicura che la diagonale di $R_t$ sia composta da 1, rendendo $R_t$ una vera matrice di correlazione condizionata.
Interpretazione della Heatmap della Matrice di Correlazione¶
La heatmap della matrice di correlazione offre una rappresentazione visiva immediata delle relazioni tra le variabili (o asset). Ecco come interpretarla:
Colori e Intensità :
I colori rappresentano il grado e la direzione della correlazione. Solitamente, tonalità più calde (ad es. rosso) indicano correlazioni positive elevate, mentre tonalità più fredde (ad es. blu) evidenziano correlazioni negative. Le tonalità intermedie indicano correlazioni deboli o prossime allo zero.Simmetria della Matrice:
La matrice è simmetrica, in quanto la correlazione tra la variabile A e B è la stessa di quella tra B e A. La diagonale principale mostra sempre il valore 1, rappresentando la correlazione di ogni variabile con se stessa.Rilevamento di Pattern e Cluster:
Zone con colori simili suggeriscono che alcuni asset si comportano in maniera molto affine, evidenziando possibili raggruppamenti o cluster di variabili correlate. Queste informazioni possono essere utili per la diversificazione del portafoglio, poiché asset con bassa correlazione tendono a ridurre il rischio complessivo.Applicazioni Pratiche:
La heatmap aiuta a individuare rapidamente le relazioni più forti e quelle deboli, facilitando la gestione del rischio e l'ottimizzazione del portafoglio. Essa può evidenziare correlazioni sistemiche e fornire spunti su come strutturare strategie di copertura.
Numero di matrici previste: 20 Matrice di covarianza sommata: [[21.17914672 0.56443504 5.70662837 10.45492047 4.6366441 8.76354384] [ 0.56443504 30.90062994 3.33438673 3.13530296 3.90248137 -1.93375715] [ 5.70662837 3.33438673 13.89567542 17.61675 2.77778082 -0.84271912] [10.45492047 3.13530296 17.61675 46.67327759 5.33488991 3.73226635] [ 4.6366441 3.90248137 2.77778082 5.33488991 35.55900339 11.0280691 ] [ 8.76354384 -1.93375715 -0.84271912 3.73226635 11.0280691 73.03672562]]
(array([0.5, 1.5, 2.5, 3.5, 4.5, 5.5]), [Text(0.5, 0, 'FTSE MIB'), Text(1.5, 0, 'London Stock Exchange'), Text(2.5, 0, 'Dow Jones'), Text(3.5, 0, 'NASDAQ'), Text(4.5, 0, 'Nikkei 225'), Text(5.5, 0, 'HANG SENG INDEX')])
usage: ipython [-h] [--debug] [--show-config] [--show-config-json] [--quiet]
[--init] [--autoindent] [--no-autoindent] [--automagic]
[--no-automagic] [--pdb] [--no-pdb] [--pprint] [--no-pprint]
[--color-info] [--no-color-info] [--ignore-cwd]
[--no-ignore-cwd] [--nosep] [--autoedit-syntax]
[--no-autoedit-syntax] [--simple-prompt] [--no-simple-prompt]
[--banner] [--no-banner] [--confirm-exit] [--no-confirm-exit]
[--term-title] [--no-term-title] [--classic] [--quick] [-i]
[--log-level TerminalIPythonApp.log_level]
[--profile-dir ProfileDir.location]
[--profile TerminalIPythonApp.profile]
[--ipython-dir TerminalIPythonApp.ipython_dir]
[--config TerminalIPythonApp.extra_config_file]
[--autocall TerminalInteractiveShell.autocall]
[--colors TerminalInteractiveShell.colors]
[--logfile TerminalInteractiveShell.logfile]
[--logappend TerminalInteractiveShell.logappend]
[-c TerminalIPythonApp.code_to_run]
[-m TerminalIPythonApp.module_to_run]
[--ext TerminalIPythonApp.extra_extensions]
[--gui TerminalIPythonApp.gui]
[--pylab [TerminalIPythonApp.pylab]]
[--matplotlib [TerminalIPythonApp.matplotlib]]
[--cache-size TerminalInteractiveShell.cache_size]
[extra_args ...]
ipython: error: unrecognized arguments: --no-input project.ipynb
[NbConvertApp] Converting notebook project.ipynb to markdown [NbConvertApp] Support files will be in project_files\ [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Making directory project_files [NbConvertApp] Writing 59522 bytes to project.md
[NbConvertApp] Converting notebook project.ipynb to html [NbConvertApp] Writing 9275904 bytes to project.html
[NbConvertApp] Converting notebook project.ipynb to pdf
[NbConvertApp] Support files will be in project_files\
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Making directory .\project_files
[NbConvertApp] Writing 62323 bytes to notebook.tex
[NbConvertApp] Building PDF
Traceback (most recent call last):
File "F:\programmi\anaconda\Scripts\jupyter-nbconvert-script.py", line 10, in <module>
sys.exit(main())
^^^^^^
File "F:\programmi\anaconda\Lib\site-packages\jupyter_core\application.py", line 277, in launch_instance
return super().launch_instance(argv=argv, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "F:\programmi\anaconda\Lib\site-packages\traitlets\config\application.py", line 992, in launch_instance
app.start()
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\nbconvertapp.py", line 423, in start
self.convert_notebooks()
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\nbconvertapp.py", line 597, in convert_notebooks
self.convert_single_notebook(notebook_filename)
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\nbconvertapp.py", line 560, in convert_single_notebook
output, resources = self.export_single_notebook(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\nbconvertapp.py", line 488, in export_single_notebook
output, resources = self.exporter.from_filename(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\exporter.py", line 189, in from_filename
return self.from_file(f, resources=resources, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\exporter.py", line 206, in from_file
return self.from_notebook_node(
^^^^^^^^^^^^^^^^^^^^^^^^
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\pdf.py", line 194, in from_notebook_node
self.run_latex(tex_file)
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\pdf.py", line 164, in run_latex
return self.run_command(
^^^^^^^^^^^^^^^^^
File "F:\programmi\anaconda\Lib\site-packages\nbconvert\exporters\pdf.py", line 111, in run_command
raise OSError(
OSError: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex.